9536. Сумма матриц

 

Заданы две матрицы A и B. Найдите их сумму C = A + B.

 

Вход. Первая строка содержит размеры матриц n и m (1 ≤ n, m ≤ 100). Следующие n строк содержат по m целых чисел и описывают матрицу A. Далее следует пустая строка, после чего в таком же формате задается матрица B.

 

Выход. Выведите матрицу С: n строк по m целых чисел.

 

Пример входа

Пример выхода

3 4

3 4 5 6

1 2 3 4

7 6 5 4

 

0 0 -3 -2

-1 3 4 5

5 6 1 2

3 4 2 4

0 5 7 9

12 12 6 6

 

 

РЕШЕНИЕ

алгебра

 

Анализ алгоритма

По заданным матрицам А и В находим их сумму в матрице С, где

Сij = Aij + Bij

 

Реализация алгоритма

Объявим матрицы a, b и c.

 

#define MAX 101

int a[MAX][MAX], b[MAX][MAX], c[MAX][MAX];

 

Читаем входные данные – матрицы А и В.

 

scanf("%d %d", &n, &m);

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

  scanf("%d", &a[i][j]);

 

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

  scanf("%d", &b[i][j]);

 

Вычисляем сумму матриц C = A + B.

 

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

  c[i][j] = a[i][j] + b[i][j];

 

Выводим результирующую матрицу.

 

for (i = 0; i < n; i++)

{

  for (j = 0; j < m; j++)

    printf("%d ", c[i][j]);

  printf("\n");

}

 

Реализация алгоритмадвойной указатель

 

#include <stdio.h>

 

int i, j, n, m;

int** a, ** b, ** c;

 

void Read(int**& matr, int n, int m)

{

  matr = new int* [n];

  for (i = 0; i < n; i++)

  {

    matr[i] = new int[m];

    for (j = 0; j < m; j++)

      scanf("%d", &matr[i][j]);

  }

}

 

void Sum(int** a, int** b, int**& c, int n, int m)

{

  c = new int* [n];

  for (i = 0; i < n; i++)

  {

    c[i] = new int[m];

    for (j = 0; j < m; j++)

       c[i][j] = a[i][j] + b[i][j];

  }

}

 

void Print(int** a)

{

  for (i = 0; i < n; i++)

  {

    for (j = 0; j < m; j++)

      printf("%d ", a[i][j]);

    printf("\n");

  }

}

 

int main(void)

{

  scanf("%d %d", &n, &m);

  Read(a, n, m);

  Read(b, n, m);

 

  Sum(a, b, c, n, m);

 

  Print(c);

  return 0;

}